package com.ssy.lingxi.scheduler.utils;

import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.TimeZone;
import java.util.UUID;

/**
 * 定时任务工具类
 * @author 万宁
 * @version 2.0.0
 * @date 2021-07-12
 */
public class ScheduleTaskUtil {

    /**
     * 生成任务的唯一标识（任务名称）
     * @return taskName字符串
     */
    public static String generateRandomIdentity() {
        return UUID.randomUUID().toString();
    }

    /**
     * 将Unix时间戳转换为LocalDateTime
     * @param timestamp Unix时间戳（精确到毫秒）
     * @return LocalDateTime
     */
    public static LocalDateTime parseTimestamp(Long timestamp) {
        return LocalDateTime.ofInstant(Instant.ofEpochMilli(timestamp), TimeZone.getDefault().toZoneId());
    }

    /**
     * 将LocalDateTime转换为Unix时间戳
     * @param localDateTime LocalDateTime时间
     * @return Unix时间戳（精确到毫秒）
     */
    public static long parseLocalDateTime(LocalDateTime localDateTime) {
        return localDateTime.toInstant(ZoneOffset.of("+8")).toEpochMilli();
    }

    /**
     * 获得永久任务的开始时间
     * @param startMinutes 开始时间（次日00:00后的分钟）
     * @return Unix时间戳（精确到毫秒）
     */
    public static long getPermanentTaskStartTime(Integer startMinutes) {
        return parseLocalDateTime(LocalDateTime.parse(LocalDateTime.now().plusDays(1).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")).concat(" 00:00:00"), DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))) + startMinutes * 60 * 1000;
    }

    /**
     * 判断Integer是否为Null或小于等于0
     * @param i Integer类型参数
     * @return 是-true，否-false
     */
    public static boolean isNullOrNegativeZero(Integer i) {
        return i == null || i.compareTo(0) <= 0;
    }

    /**
     * 判断Long是否为Null或小于等于0
     * @param l Long类型参数
     * @return 是-true，否-false
     */
    public static boolean isNullOrNegativeZero(Long l) {
        return l == null || l.compareTo(0L) <= 0;
    }
}
